selection: Add texture getter/setter
authorBenjamin Otte <otte@redhat.com>
Sat, 2 Dec 2017 13:25:35 +0000 (14:25 +0100)
committerBenjamin Otte <otte@redhat.com>
Sat, 2 Dec 2017 15:21:58 +0000 (16:21 +0100)
docs/reference/gtk/gtk4-sections.txt
gtk/gtkselection.c
gtk/gtkselection.h

index 4a7324144390c71732829913c5dd2df7fcfe8d9d..fb524303f05934c0c7a54332a2e98a98aaa6b5de 100644 (file)
@@ -5207,6 +5207,8 @@ gtk_selection_data_set_pixbuf
 gtk_selection_data_get_pixbuf
 gtk_selection_data_set_surface
 gtk_selection_data_get_surface
+gtk_selection_data_set_texture
+gtk_selection_data_get_texture
 gtk_selection_data_set_uris
 gtk_selection_data_get_uris
 gtk_selection_data_get_targets
index b848485b9bce3ec884d54aed98684cfd5bea0e83..f90f5efd95c17ea4e298d0abe7518673763b4e81 100644 (file)
@@ -90,6 +90,7 @@
 #include "gdk-pixbuf/gdk-pixbuf.h"
 
 #include "gdk/gdkcontentformatsprivate.h"
+#include "gdk/gdktextureprivate.h"
 
 #ifdef GDK_WINDOWING_X11
 #include "x11/gdkx.h"
@@ -1555,6 +1556,69 @@ gtk_selection_data_get_pixbuf (const GtkSelectionData *selection_data)
   return result;
 }
 
+/**
+ * gtk_selection_data_set_texture:
+ * @selection_data: a #GtkSelectionData
+ * @texture: a #GdkTexture
+ * 
+ * Sets the contents of the selection from a #GdkTexture.
+ * The surface is converted to the form determined by
+ * @selection_data->target.
+ * 
+ * Returns: %TRUE if the selection was successfully set,
+ *   otherwise %FALSE.
+ *
+ * Since: 3.94
+ **/
+gboolean
+gtk_selection_data_set_texture (GtkSelectionData *selection_data,
+                                GdkTexture       *texture)
+{
+  cairo_surface_t *surface;
+  gboolean retval;
+
+  g_return_val_if_fail (selection_data != NULL, FALSE);
+  g_return_val_if_fail (GDK_IS_TEXTURE (texture), FALSE);
+
+  surface = gdk_texture_download_surface (texture);
+  retval = gtk_selection_data_set_surface (selection_data, surface);
+  cairo_surface_destroy (surface);
+
+  return retval;
+}
+
+/**
+ * gtk_selection_data_get_texture:
+ * @selection_data: a #GtkSelectionData
+ * 
+ * Gets the contents of the selection data as a #GdkPixbuf.
+ * 
+ * Returns: (nullable) (transfer full): if the selection data
+ *   contained a recognized image type and it could be converted to a
+ *   #GdkTexture, a newly allocated texture is returned, otherwise
+ *   %NULL.  If the result is non-%NULL it must be freed with
+ *   g_object_unref().
+ *
+ * Since: 3.94
+ **/
+GdkTexture *
+gtk_selection_data_get_texture (const GtkSelectionData *selection_data)
+{
+  GdkTexture *texture;
+  GdkPixbuf *pixbuf;
+
+  g_return_val_if_fail (selection_data != NULL, NULL);
+
+  pixbuf = gtk_selection_data_get_pixbuf (selection_data);
+  if (pixbuf == NULL)
+    return NULL;
+
+  texture = gdk_texture_new_for_pixbuf (pixbuf);
+  g_object_unref (pixbuf);
+
+  return texture;
+}
+
 /**
  * gtk_selection_data_set_uris:
  * @selection_data: a #GtkSelectionData
index 3f0d69b7b4ba7f88a378dda7a754135d43e8719b..b386b0f17278b7002bcb2334d5d7c3311248bdb7 100644 (file)
@@ -115,6 +115,11 @@ gboolean gtk_selection_data_set_surface (GtkSelectionData  *selection_data,
                                          cairo_surface_t   *surface);
 GDK_AVAILABLE_IN_ALL
 GdkPixbuf *gtk_selection_data_get_pixbuf (const GtkSelectionData  *selection_data);
+GDK_AVAILABLE_IN_3_94
+gboolean gtk_selection_data_set_texture (GtkSelectionData *selection_data,
+                                         GdkTexture       *texture);
+GDK_AVAILABLE_IN_3_94
+GdkTexture *gtk_selection_data_get_texture (const GtkSelectionData *selection_data);
 GDK_AVAILABLE_IN_ALL
 gboolean gtk_selection_data_set_uris (GtkSelectionData     *selection_data,
                                       gchar               **uris);